package org.example.config.domain;

import lombok.Data;

@Data
public class Result<T> {
    //返回码
    private Integer code;

    //返回消息
    private String message;

    //返回数据
    private T data;

    private Result() {
    }

    /**
     * 解释：
     * 方法签名：
     *
     * public static <T> Result<T> success()
     * public static: 表示这是一个静态方法，可以在不创建包含该方法的类的实例的情况下调用。
     * <T>: 声明了一个泛型类型参数 T，使得该方法可以处理任何数据类型。
     * Result<T>: 指定了该方法的返回类型为 Result<T>。这里假设 Result 是一个泛型类，接受一个类型参数 T。
     * 方法实现：
     *
     * return new Result<>();
     * new Result<>();: 创建了 Result 类的一个新实例。菱形操作符 <> 在这里用来从调用该方法的上下文中推断出类型 T，以确保返回的 Result 对象与调用时指定的类型相同。
     * 总结：
     * success 方法的目的是创建并返回一个 Result<T> 的实例。类型 T 是泛型的，意味着它可以在运行时由调用者指定为任何类型。具体的 Result<T> 类的行为和实现细节（例如其字段、方法和行为）将取决于其在代码库中的具体实现。根据具体的需求或所需的功能，可能需要调整 Result<T> 类的实现。
     *
     * 这个方法能够方便地生成一个泛型结果对象，适应不同类型的数据处理需求。
     * @return
     * @param <T>
     */
    public static <T> Result<T> build( Integer code,String message,T data) {
        Result<T> result = new Result<T>();
        result.setCode(code);
        result.setMessage(message);
        result.setData(data);
        return result;
    }


    public static <T> Result<T> build( Integer code,String message) {
        Result<T> result = new Result<T>();
        result.setCode(code);
        result.setMessage(message);
        return result;
    }

    public static <T> Result  build (T data,ResultCodeEnum resultCodeEnum){

        return build(resultCodeEnum.getCode(),resultCodeEnum.getMessage(),data);
    }

}
